package net.zjitc.homework.hw2;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Author Administrator
 * @Date 2020/5/21 14:48
 * 处理表单请求：
 * <p>
 * 当输入用户名和密码后，若用户名、密码 跟已有的数据一致，
 * 则重定向到另一Servlet，结果如下（显示用户名）
 * 若不一致，则将错误信息保存在request域，再转发到另一Servlet，
 **/
@WebServlet("/forwardAndRedirect1")
public class ForwardAndRedirect1 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /* 1、先定义已有的用户名和密码 (后续是从数据库取出来)
         *  2、获取用户输入的用户名和密码
         *  3、比较：
         *      若一致，把用户名保存在域对象，重定向到 forwardAndRedirect2
         *      若不一致，把错误信息保存在域对象，转发到forwardAndRedirect3 */
        String name = "张三";
        String pwd = "123";
        /* 获取用户输入的用户名和密码
         *  通过请求request对象获取请求参数*/
        /*获取中文的请求参数，必须设置编码为utf-8*/
        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username);
        /* 比较 */
        if (name.equals(username) && pwd.equals(password)) {
            /* 一致，把用户名保存在域对象，重定向到 forwardAndRedirect2:
            *  域对象：传递/共享 （不同Servlet之间传递/共享数据）
            *        request域：在一次请求内传递/共享数据 */
            /* 重定向：是2次请求，无法用request域传递数据 */
//            req.setAttribute("user",username);
            /* session域，在一次会话内（多次请求）传递/共享数据*/
            req.getSession().setAttribute("user",username);
            /* 重定向时，路径需要加上项目的访问路径/资源虚拟路径
            *  重定向的URL是给浏览器，让客户端浏览器去访问*/
            /* 项目的访问路径，目前是/web，之后可能会修改，这里就不能写死*/
            String contextPath = req.getContextPath();
            resp.sendRedirect(contextPath+"/forwardAndRedirect2");

        } else {
            /*不一致，把错误信息保存在域对象，转发到forwardAndRedirect3
            * 转发是一次请求，所以可以用request域传递数据 */
            req.setAttribute("msg","用户名或密码错误");
            /* 转发时，不需要加项目的访问路径
            *  转发的URL是给服务器用的，*/
            req.getRequestDispatcher("/forwardAndRedirect3").forward(req,resp);

        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
}
